The present disclosure is generally directed to dynamically adjusting over-provisioning space of a flash controller and, more specifically, to techniques for dynamically adjusting over-provisioning space of a flash controller based on workload characteristics (e.g., read/write ratio, write amplification, and write access distribution).
NAND flash memory is an electrically programmable and erasable non-volatile memory technology that stores one or more bits of data per memory cell as a charge on the floating gate of a transistor or a similar charge trap structure. In a typical implementation, a NAND flash memory array is organized in blocks (also referred to as “erase blocks”) of physical memory, each of which includes multiple physical pages each in turn containing a multiplicity of memory cells. By virtue of the arrangement of the word and bit lines utilized to access memory cells, flash memory arrays can generally be programmed on a page basis, but are erased on a block basis.
As is known in the art, blocks of NAND flash memory must be erased prior to being programmed with new data. A block of NAND flash memory cells is erased by applying a high positive erase voltage pulse to the p-well bulk area of the selected block and by biasing to ground all of the word lines of the memory cells to be erased. Application of the erase pulse promotes tunneling of electrons off of the floating gates of the memory cells biased to ground to give them a net positive charge and thus transition the voltage thresholds of the memory cells toward the erased state. Each erase pulse is generally followed by an erase verify operation that reads the erase block to determine whether the erase operation was successful, for example, by verifying that less than a threshold number of memory cells in the erase block have been unsuccessfully erased. In general, erase pulses continue to be applied to the erase block until the erase verify operation succeeds or until a predetermined number of erase pulses have been used (i.e., the erase pulse budget is exhausted).
A NAND flash memory cell can be programmed by applying a positive high program voltage to the word line of the memory cell to be programmed and by applying an intermediate pass voltage to the memory cells in the same string in which programming is to be inhibited. Application of the program voltage causes tunneling of electrons onto the floating gate to change its state from an initial erased state to a programmed state having a net negative charge. Following programming, the programmed page is typically read in a read verify operation to ensure that the program operation was successful, for example, by verifying that less than a threshold number of memory cells in the programmed page contain bit errors. In general, program and read verify operations are applied to the page until the read verify operation succeeds or until a predetermined number of programming pulses have been used (i.e., the program pulse budget is exhausted).
Thin provisioning, in a shared-storage environment, facilitates optimizing available storage utilization by enabling over-allocation or over-subscription. Thin provisioning relies on on-demand allocation of storage blocks versus the conventional approach of allocating all storage blocks up-front. In general, thin provisioning helps avoid poor utilization rates in which large storage pools are allocated but remain unused.
In computer science, garbage collection (GC) is a form of automatic memory management in which a garbage collector attempts to reclaim garbage (memory occupied by objects that are no longer in use by a program). With respect to a flash memory, garbage collection involves reading and re-writing data to the flash memory. Data is written to the flash memory in units called pages. However, as noted above, flash memory can only be erased in larger units called blocks (made up of multiple pages). If the data in some of the pages of the block are no longer needed (also called stale, invalid, or dirty pages), only the pages with good data in that block are read and re-written into another previously erased empty block.
Because a flash memory must be erased before the flash memory can be re-written, garbage collection results in re-writing user data and metadata more than once. That is, re-writing some data requires an already used portion of flash memory to be read, updated, and written to a new location, together with initially erasing the new location if the new location was previously used at some point in time. Due to the way flash memory works, much larger portions of flash memory must be erased and rewritten than is usually required by the amount of new data. This multiplying effect (known as write amplification) increases the number of writes required over the life of a flash memory and shortens the time the flash memory can reliably operate.